<?php

/**
 * Description of RepoFactura
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoFactura extends Repositorio
{

  function __construct()
  {
    $this->tabla = "factura";
    $this->id = "idFactura";
  }

  function crearFactura()
  {
    
  }

  function agregar(Factura $factura)
  {
   try
    {
      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "INSERT INTO " . $this->tabla . "(nroFactura, nombre, cuit, fecha_hora, tipoFactura, tipoIva, formaPago, domicilio) values (";
      $query .= "'" . $factura->getNroFactura() . "', ";
      $query .= "'" . $factura->getNombre() . "', ";
      $query .= "'" . $factura->getCuit() . "', ";
      $query .= "'" . $factura->getFechaHora() . "', ";
      $query .= $factura->getIdTipoFactura() . ", ";
      $query .= "'" . $factura->getTipoIva() . "', ";
      $query .= $factura->getFormaDePago() . ", ";
      $query .= "'" . $factura->getDomicilio() . "')";
      $result = $this->PostSQL($query);
      $id = $this->GetInsertedId();
      if ($result)
      {
        if ($factura->getDetalleFactura() != null)
        {
          $repoDetalleFactura = new RepoDetalleFactura();
          /* @var $detalle DetalleFactura */
          foreach ($factura->getDetalleFactura() as $detalle)
          {
            $detalle->setFactura($id);
            $result = $repoDetalleFactura->agregar($detalle);
            if (!$result){
              $this->rollbackTransaction();
              return $result;
            }
          }
        }
      } else
      {
        $this->rollbackTransaction();
      }
      $this->commitTransaction();
      $this->CloseDB($link);
      if ($result){
        return $id;
      } else{
          return 0;
      }
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  function modificar(Factura $factura)
  {
    /**
     * @todo Ver si existe el caso de modificar factura, en principio NO. 
     */
//    try
//    {
//      
//      $outlet->save($factura);
//      return "1";
//    } catch (Exception $ex)
//    {
//      return $ex;
//    }
  }

}

?>
